Освобождает принимающий вариант и копирует исходный, выполняя необходимые обращения по указателям, если для исходного варианта задан флаг VT_BYREF.
HRESULT VariantCopyInd ( VARIANTARG FAR* pvargDest, VARIANTARG FAR* pvargSrc );
Параметры
pvargDest
Указатель на VARIANTARG, принимающий
копию.
pvargSrc
Указатель на копируемый VARIANTARG.
Коды возврата
Из возвращенного HRESULT получают один из следующих
кодов возврата:
| Код возврата | Значение |
| S_OK | Успех. |
| DISP_E_ARRAYISLOCKED | Вариант содержит заблокированный массив. |
| DISP_E_BADVARTYPE | Исходный или принимающий вариант имеют недопустимый тип (обычно не инициализированы). |
| E_OUTOFMEMORY | Невозможно выделить память для размещения копии. |
| E_NVALIDARG | Аргумент pvargSrc — VT_ARRAY. |
Комментарии
Эта функция полезна тогда, когда требуется копия варианта и
необходимо гарантировать, что она не будет использовать VT_BYREF,
например, при работе с аргументами в реализации
IDispatch::Invoke.
Например, если исходный тип — это (VT_BYREF |
VT_I2), то принимающий вариант будет иметь тип просто VT_I2. Это
верно для любых допустимых комбинаций с VT_BYREF, в том числе
VT_VARIANT.
Если pvargSrc имеет тип (VT_BYREF |
VT_VARIANT) и содержащийся в нем вариант тоже использует VT_BYREF, то
и вложенный вариант разыменовывается (dereferenced).
Функция
освобождает предыдущее содержимое pvargDest.